package com.android.monee.binding.observable;

import com.android.monee.binding.Field;
import com.android.monee.binding.observer.Observer;


/**
 * Interface à implémenter pour devenir observable.
 * @author anthony
 *
 * @param <S> Le type l'objet contenant les propriétés à observer.
 * <br/>Exemple : Pour rendre observables les propriétés de la classe Toto 
 * elle devra implémenter l'interface Observable{@literal <Toto>}.
 * 
 * @see ObservableImpl
 */
public interface Observable<S> {

	public <T, V> void addObserver (Observer<S, T, V> o);
	
	public <T, V> void deleteObserver(Observer<S, T, V> o);
	
	public <T, V> void notify(Class<? extends Field> fieldClass);
	
	public S getObservedData();
}
